The Internet has become a world-wide collaboration environment. Collaborative applications ranging from rich clients to web applications, have tapped into this environment to offer a variety of services to users. Until recently, only rich clients and applets offered high user interactivity. In particular, traditional web applications did not provide good response times to users' actions, which in turn, reduced their interactivity. They suffered poor response times for three reasons. First, because all user requests are processed by the server, the response time for a request included the round-trip time to the server. Second, the requests to the server were made in a synchronous fashion, which blocked the user from performing further actions until the response from the server was received and processed. Finally, any response from the server required a full page refresh.
Recently, some interactive web applications have appeared which do provide a high degree of user interactivity. For example, one such application persists users' changes, so that when these or other users view a page of the application, they will all see the latest version. In addition, when multiple users edit the same page concurrently, each user can see the changes made by other users. This is called synchronous sharing. Synchronous sharing, in turn, requires that users' views are kept consistent even when users make conflicting changes. However, all these applications rely on proprietary solutions for each requirement. As a result, to satisfy these requirements, the developers of new interactive web applications have to “reinvent the wheel” repeatedly.